package main

import (
	"fmt"
)

/*
 数组中数字出现的次数_1
给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。

说明：
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗？
*/

//自己写的铸币解法🐷
/*
func singleNumber(nums []int) int {
	var i int
	sort.Ints(nums)
	if len(nums)==1{
		return nums[0]
	}
	for i=0;i<len(nums)-1;i=i+2{
		if nums[0]!=nums[1]{
			return nums[0]
		}else if nums[i]!=nums[i+1]{
			break
		}
	}
	return nums[i]
}
*/

//位运算
/*异或运算
1^0=1
1^1=0
a^b=1

a^a=0
a^0=a
*/
func singleNumber(nums []int) int {
	var str = 0
	for i := 0; i < len(nums); i++ {
		str = str ^ nums[i]
	}
	return str
}

func main() {
	num := []int{1, 2, 4, 3, 4, 3, 2}
	fmt.Println(singleNumber(num))
}
